package com.xiaoshuidi.cloud.module.rooms.service;

import com.xiaoshuidi.cloud.framework.common.pojo.CommonResult;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.rooms.api.home.vo.RoomLayoutVO;
import com.xiaoshuidi.cloud.module.rooms.controller.app.home.vo.*;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author hans.zhang
 */
public interface HomeService {
    /**
     * 集中式-搜索找房
     *
     * @param searchBox        搜索框查询
     * @param district         区域
     * @param monthRentalMin   租金范围-下限
     * @param monthRentalMax   租金范围-上限
     * @param longitude        地铁站经度
     * @param latitude         地铁站纬度
     * @param sortRule         排序规则 1:推荐排序 2:最新发布 3:价格升序 4:价格降序 5:面积升序 6:面积降序
     * @param isWhole          出租方式,是否整租 true:整租 false:合租
     * @param bedRoomNum       户型-几室 1:一室 2:二室 3:三室 4:四室 5:其他
     * @param publicFacilities 特色需求(公共设施)
     * @param tenantId
     * @param lon
     * @param lat
     * @return 门店信息
     */
    CommonResult<PageResult<ConcentratedFindHouseRespVO>> concentratedFindHouse(String searchBox, String district, Double monthRentalMin, Double monthRentalMax, Double longitude, Double latitude, Integer sortRule, Boolean isWhole, Integer bedRoomNum, String publicFacilities, Integer pageNum, Integer pageSize, Long tenantId, String lon, String lat);

    /**
     * 分散式-搜索找房
     *
     * @param searchBox        搜索框查询
     * @param district         区域
     * @param monthRentalMin   租金范围-下限
     * @param monthRentalMax   租金范围-上限
     * @param longitude        地铁站经度
     * @param latitude         地铁站纬度
     * @param sortRule         排序规则 1:推荐排序 2:最新发布 3:价格升序 4:价格降序 5:面积升序 6:面积降序
     * @param isWhole          出租方式,是否整租 true:整租 false:合租
     * @param bedRoomNum       户型-几室 1:一室 2:二室 3:三室 4:四室 5:其他
     * @param publicFacilities 特色需求(公共设施)
     * @param tenantId
     * @return 门店信息
     */
    CommonResult<PageResult<NoConcentratedFindHouseRespVO>> noConcentratedFindHouse(String searchBox, String district, Double monthRentalMin, Double monthRentalMax, Double longitude, Double latitude, Integer sortRule, Boolean isWhole, Integer bedRoomNum, String publicFacilities, Integer pageNum, Integer pageSize, Long tenantId, Long roomAreaId);


    /**
     * 社区-查看门店详情
     *
     * @param apartmentId
     * @return
     */
    CommonResult<GetApartmentInfoRespVO> getApartmentInfo(Long apartmentId);

    /**
     * 社区-查看房型详情
     *
     * @param apartmentId 门店id
     * @param layoutId    房型id
     * @return
     */
    CommonResult<GetLayoutInfoRespVO> getLayoutInfo(Long apartmentId, Long layoutId);

    /**
     * 社区-房源详情
     *
     * @param roomHouseId 房源id
     * @return
     */
    CommonResult<GetRoomHouseInfoRespVO> getRoomHouseInfo(Long roomHouseId);

    /**
     * 社区-搜索房源
     *
     * @param isConcentrated
     * @param searchBox
     * @param pageNo
     * @param pageSize
     * @param tenantId
     * @return
     */
    CommonResult<PageResult<SearchRoomRespVo>> searchRoom(@NotNull(message = "是否集中式不能为空") Boolean isConcentrated, String searchBox, Integer pageNo, Integer pageSize, Long tenantId);

    /**
     * 同小区房源
     *
     * @param roomHouseId 房源id
     * @param pageNo      分页参数
     * @param pageSize    分页参数
     * @param tenantId    租户id
     * @return
     */
    CommonResult<PageResult<SameResidentialListingsRespVO>> sameResidentialListings(Long roomHouseId, Integer pageNo, Integer pageSize, Long tenantId);

    /**
     * 社区-房源详情-同房源其他房间
     *
     * @param roomHouseId 房源ID
     * @param tenantId    租户ID
     * @return
     */
    CommonResult<List<OtherRoomsInTheSameListingRespVO>> otherRoomsInTheSameListing(Long roomHouseId, Long tenantId);

    /**
     * 社区-房源详情-推荐附近房源
     *
     * @param roomHouseId 房源ID
     * @param tenantId    租户ID
     * @return
     */
    CommonResult<List<OtherRoomsInTheSameListingRespVO>> recommendListingsNearYou(Long roomHouseId, Long tenantId);
    CommonResult<List<RoomLayoutVO>> queryRoomLayout();
}
